package com.monolithiot.sso.service;

import com.monolithiot.sso.common.entity.User;
import com.monolithiot.sso.common.exception.AlreadyExistedException;
import org.springframework.web.multipart.MultipartFile;

import javax.validation.constraints.NotNull;
import java.io.IOException;

/**
 * 2018/12/10 Create by 郭文梁
 * UserService
 * 用户业务服务规则定义
 *
 * @author 郭文梁
 * @date 2018/12/10
 */
public interface UserService extends BaseService<User> {
    /**
     * 用户注册
     *
     * @param user 用户填入的信息
     * @return 注册结果
     * @throws AlreadyExistedException 用户输入内容已存在时抛出
     */
    @NotNull
    User register(User user) throws AlreadyExistedException;

    /**
     * 检查用户是否存在
     * name phone_number mobile_number email
     *
     * @param user 用户信息
     * @throws AlreadyExistedException 存在时抛出该异常
     */
    void checkNotExists(User user) throws AlreadyExistedException;

    /**
     * 用户登录
     *
     * @param account  账户名（name, mobileNumber, phoneNumber, email）
     * @param password 密码
     * @return User entity
     */
    User login(String account, String password);

    /**
     * 更新用户基本信息
     *
     * @param user 用户对象
     * @return 更新后的用户
     * @throws AlreadyExistedException name email phone mobile 等重复时抛出
     */
    User updateUserInfo(User user) throws AlreadyExistedException;

    /**
     * 设置用户头像
     *
     * @param user   用户对象
     * @param hpFile 头像文件
     * @return 用户
     * @throws IOException IO异常
     */
    @NotNull
    User setHeadPortrait(User user, MultipartFile hpFile) throws IOException;
}
